

---普通对象----->查找属性 ----->发现没有----->去查原表---->有元表就找原表的__index---> 如果元表的__index是普通string 就直接返回值----->如果__index是一个table --->就去查__index的属性值 ---->如果是一个function 就更厉害了

---普通对象-
--arr = {1, 2, 3, 4}
--
--
--
--
--print(arr)
--arr = setmetatable(arr, {__tostring = function (self)
--    local result = '{'
--    local sep = ''
--    for _, i in pairs(self) do
--        result = result ..sep .. i
--        sep = ', '
--    end
--    result = result .. '}'
--    return result
--end})
--print(arr)  --> {1, 2, 3, 4}


---普通对象-
local parent={work="努力工作",rest="睡觉"}

---如果元表是一个table
local child={t=1}
child= setmetatable(child, {__index=parent})

print(child["work"])

print(child.rest)

print(child.t)



---output
---lua.exe object/metatable.lua
--table: 0x0019bd28
--{1, 2, 3, 4}
--努力工作
--睡觉



----
---如果元表是一个string  没有效果
--local o={}
--Employee.__index="working"
--o= setmetatable(o, Employee)
--
--print(o.work)



---如果元表是一个function
--local o={}
--Employee.__index=function (self)
--   return "i'm working"--{working="function working",working2="function working"}
--end
--o= setmetatable(o, Employee)
--
--print(o.working)


---__index是重写了下标查找的功能
